import { reactive } from 'vue'
export interface LrcRes {
  time: number
  lrc: string
}

/**
 * 歌词
 * @returns
 */
export const useLyric = () => {
  /**
   * 格式化
   * @param lrc
   * @returns
   */
  const formatLrc = (lrc: string) => {
    const lrcArr = lrc.split('\n')
    const result = reactive<Array<LrcRes>>([])
    for (const item of lrcArr) {
      const parts = item.split(']')
      const timeStr = parts[0].substring(1)
      const obj: LrcRes = {
        time: pauseLrcStr(timeStr),
        lrc: parts[1],
      }
      result.push(obj)
    }

    return result
  }

  /**
   * 计算当前应高亮展示哪句歌词
   * @param lrcArr
   * @param currentTime
   * @returns
   */
  const findIndex = (lrcArr: Array<LrcRes>, currentTime: number) => {
    for (const [index, item] of lrcArr.entries()) {
      // 当前时间小于歌词时间说明是当前歌词的上一句
      if (currentTime < item.time) {
        return index - 1
      }
    }
    // 最后一句 找遍了没找到
    return lrcArr.length - 1
  }

  const setOffset = () => {}

  // 辅助函数 计算时间
  const pauseLrcStr = (str: string) => {
    const parts = str.split(':')
    const min = parseFloat(parts[0])
    const sec = parseFloat(parts[1])
    return parseInt(((min * 60 + sec) * 1000).toString())
  }

  return {
    formatLrc,
    findIndex,
  }
}
